在前天中,我們的程式多半假設「一切都會順利」。
但是現實世界中,程式很常遇到「突發狀況」:
如果沒有處理這些狀況,程式就會「直接掛掉」。
為了讓程式更穩定,我們需要學會 錯誤與例外處理(Exception Handling)。
生活比喻:
就像你要搭火車,如果火車誤點,系統應該提示「改搭下一班」,而不是整個車站停擺。
try-excepttry:
    x = 10 / 0
except ZeroDivisionError:
    print("發生錯誤:不能除以零")
try:嘗試執行可能會出錯的程式碼except:捕捉錯誤,並執行對應的處理try:
    num = int(input("請輸入一個數字:"))
    result = 100 / num
    print("計算結果:", result)
except ValueError:
    print("發生錯誤:輸入的不是數字")
except ZeroDivisionError:
    print("發生錯誤:不能除以零")
else 與 finallytry:
    name = "Jr"
    score = int(input(f"{name} 請輸入分數:"))
except ValueError:
    print("請輸入有效的數字")
else:
    print(f"{name} 的分數是 {score}")
finally:
    print("程式結束,感謝使用!")
def check_age(age):
    if age < 0:
        raise ValueError("年齡不能是負數")
    return age
try:
    print(check_age(-5))
except ValueError as e:
    print("錯誤:", e)

| 錯誤類型 | 常見情境 | 
|---|---|
| ValueError | 資料型別轉換錯誤( int("abc")) | 
| ZeroDivisionError | 除以零 | 
| FileNotFoundError | 開啟不存在的檔案 | 
| IndexError | list 索引超出範圍 | 
| KeyError | dict 查不到 key | 
def get_score():
    try:
        score = int(input("請輸入分數:"))
        if not (0 <= score <= 100):
            raise ValueError("分數必須在 0 ~ 100 之間")
        return score
    except ValueError as e:
        print("錯誤:", e)
        return None
Jr_score = get_score()
if Jr_score is not None:
    print(f"Jr 的成績是 {Jr_score}")
生活化比喻小結
程式中的錯誤就像搭車時的突發狀況:火車誤點、客運塞車、甚至道路封閉。
如果沒有備案,就只能乾等,行程全被打亂。
但有了「例外處理」就像規劃好替代路線:改搭下一班車、換走別條路,雖然過程有波折,但最終仍能抵達目的地。